// TabWorkspace Manager - 内容脚本
// 用于在网页中执行特定操作，如获取页面内容、截图等

(function() {
  'use strict';
  
  // 防止重复注入
  if (window.tabWorkspaceContentScript) {
    return;
  }
  window.tabWorkspaceContentScript = true;
  
  console.log('TabWorkspace Manager 内容脚本已加载');
  
  // 监听来自popup或background的消息
  chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    console.log('内容脚本收到消息:', request);
    
    switch (request.action) {
      case 'getPageContent':
        handleGetPageContent(sendResponse);
        return true; // 保持消息通道开放
        
      case 'getPageMetadata':
        handleGetPageMetadata(sendResponse);
        return true;
        
      case 'capturePageScreenshot':
        handleCapturePageScreenshot(sendResponse);
        return true;
        
      case 'getPageText':
        handleGetPageText(sendResponse);
        return true;
        
      default:
        console.warn('内容脚本收到未知消息类型:', request.action);
        sendResponse({ success: false, error: '未知的消息类型' });
    }
  });
  
  // 获取页面内容
  function handleGetPageContent(sendResponse) {
    try {
      const content = {
        title: document.title,
        url: window.location.href,
        favicon: getFavicon(),
        description: getMetaDescription(),
        keywords: getMetaKeywords(),
        html: document.documentElement.outerHTML,
        text: getPageText(),
        timestamp: new Date().toISOString(),
        viewport: {
          width: window.innerWidth,
          height: window.innerHeight
        },
        scrollPosition: {
          x: window.scrollX,
          y: window.scrollY
        }
      };
      
      sendResponse({ 
        success: true, 
        data: content 
      });
    } catch (error) {
      console.error('获取页面内容失败:', error);
      sendResponse({ 
        success: false, 
        error: error.message 
      });
    }
  }
  
  // 获取页面元数据
  function handleGetPageMetadata(sendResponse) {
    try {
      const metadata = {
        title: document.title,
        url: window.location.href,
        favicon: getFavicon(),
        description: getMetaDescription(),
        keywords: getMetaKeywords(),
        author: getMetaAuthor(),
        publishDate: getPublishDate(),
        lastModified: document.lastModified,
        language: document.documentElement.lang || 'unknown',
        charset: document.characterSet,
        timestamp: new Date().toISOString()
      };
      
      sendResponse({ 
        success: true, 
        data: metadata 
      });
    } catch (error) {
      console.error('获取页面元数据失败:', error);
      sendResponse({ 
        success: false, 
        error: error.message 
      });
    }
  }
  
  // 获取页面文本内容
  function handleGetPageText(sendResponse) {
    try {
      const text = getPageText();
      sendResponse({ 
        success: true, 
        data: text 
      });
    } catch (error) {
      console.error('获取页面文本失败:', error);
      sendResponse({ 
        success: false, 
        error: error.message 
      });
    }
  }
  
  // 处理页面截图（实际截图由background script完成）
  function handleCapturePageScreenshot(sendResponse) {
    try {
      // 获取页面尺寸信息
      const pageInfo = {
        viewport: {
          width: window.innerWidth,
          height: window.innerHeight
        },
        document: {
          width: document.documentElement.scrollWidth,
          height: document.documentElement.scrollHeight
        },
        scroll: {
          x: window.scrollX,
          y: window.scrollY
        }
      };
      
      sendResponse({ 
        success: true, 
        data: pageInfo 
      });
    } catch (error) {
      console.error('获取页面截图信息失败:', error);
      sendResponse({ 
        success: false, 
        error: error.message 
      });
    }
  }
  
  // 获取网站图标
  function getFavicon() {
    // 尝试多种方式获取favicon
    const selectors = [
      'link[rel="icon"]',
      'link[rel="shortcut icon"]',
      'link[rel="apple-touch-icon"]',
      'link[rel="apple-touch-icon-precomposed"]'
    ];
    
    for (const selector of selectors) {
      const link = document.querySelector(selector);
      if (link && link.href) {
        return link.href;
      }
    }
    
    // 默认favicon路径
    const defaultFavicon = new URL('/favicon.ico', window.location.origin).href;
    return defaultFavicon;
  }
  
  // 获取页面描述
  function getMetaDescription() {
    const metaDesc = document.querySelector('meta[name="description"]');
    return metaDesc ? metaDesc.content : '';
  }
  
  // 获取页面关键词
  function getMetaKeywords() {
    const metaKeywords = document.querySelector('meta[name="keywords"]');
    return metaKeywords ? metaKeywords.content : '';
  }
  
  // 获取页面作者
  function getMetaAuthor() {
    const metaAuthor = document.querySelector('meta[name="author"]');
    return metaAuthor ? metaAuthor.content : '';
  }
  
  // 获取发布日期
  function getPublishDate() {
    const selectors = [
      'meta[property="article:published_time"]',
      'meta[name="date"]',
      'meta[name="publish_date"]',
      'time[datetime]'
    ];
    
    for (const selector of selectors) {
      const element = document.querySelector(selector);
      if (element) {
        const content = element.content || element.getAttribute('datetime');
        if (content) {
          return content;
        }
      }
    }
    
    return '';
  }
  
  // 获取页面主要文本内容
  function getPageText() {
    // 移除脚本和样式标签
    const clone = document.cloneNode(true);
    const scripts = clone.querySelectorAll('script, style, noscript');
    scripts.forEach(el => el.remove());
    
    // 获取主要内容区域
    const contentSelectors = [
      'main',
      'article',
      '.content',
      '.main-content',
      '#content',
      '#main',
      '.post-content',
      '.entry-content'
    ];
    
    let contentElement = null;
    for (const selector of contentSelectors) {
      contentElement = clone.querySelector(selector);
      if (contentElement) {
        break;
      }
    }
    
    // 如果没找到主要内容区域，使用body
    if (!contentElement) {
      contentElement = clone.querySelector('body');
    }
    
    if (!contentElement) {
      return document.body.innerText || '';
    }
    
    // 提取文本并清理
    let text = contentElement.innerText || contentElement.textContent || '';
    
    // 清理多余的空白字符
    text = text.replace(/\s+/g, ' ').trim();
    
    // 限制文本长度（避免存储过大的内容）
    const maxLength = 10000;
    if (text.length > maxLength) {
      text = text.substring(0, maxLength) + '...';
    }
    
    return text;
  }
  
  // 工具函数：安全地执行DOM操作
  function safeExecute(fn, fallback = null) {
    try {
      return fn();
    } catch (error) {
      console.warn('DOM操作失败:', error);
      return fallback;
    }
  }
  
  // 监听页面变化（用于单页应用）
  let lastUrl = window.location.href;
  
  function checkUrlChange() {
    const currentUrl = window.location.href;
    if (currentUrl !== lastUrl) {
      lastUrl = currentUrl;
      console.log('页面URL已变化:', currentUrl);
      
      // 通知background script页面变化
      chrome.runtime.sendMessage({
        action: 'pageChanged',
        url: currentUrl,
        title: document.title
      }).catch(() => {
        // 忽略错误
      });
    }
  }
  
  // 监听pushState和replaceState（用于SPA）
  const originalPushState = history.pushState;
  const originalReplaceState = history.replaceState;
  
  history.pushState = function() {
    originalPushState.apply(history, arguments);
    setTimeout(checkUrlChange, 100);
  };
  
  history.replaceState = function() {
    originalReplaceState.apply(history, arguments);
    setTimeout(checkUrlChange, 100);
  };
  
  // 监听popstate事件
  window.addEventListener('popstate', () => {
    setTimeout(checkUrlChange, 100);
  });
  
  // 监听页面加载完成
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', () => {
      console.log('页面DOM加载完成');
    });
  }
  
  // 监听页面完全加载
  if (document.readyState !== 'complete') {
    window.addEventListener('load', () => {
      console.log('页面完全加载完成');
    });
  }
  
  // 页面卸载时清理
  window.addEventListener('beforeunload', () => {
    console.log('页面即将卸载');
  });
  
  // 监听页面可见性变化
  document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'visible') {
      console.log('页面变为可见');
    } else {
      console.log('页面变为隐藏');
    }
  });
  
  // 错误处理
  window.addEventListener('error', (event) => {
    console.error('页面发生错误:', event.error);
  });
  
  // 未处理的Promise拒绝
  window.addEventListener('unhandledrejection', (event) => {
    console.error('未处理的Promise拒绝:', event.reason);
  });
  
  console.log('TabWorkspace Manager 内容脚本初始化完成');
  
})();

// 导出一些工具函数供其他脚本使用
window.TabWorkspaceUtils = {
  // 获取当前页面的基本信息
  getPageInfo: function() {
    return {
      title: document.title,
      url: window.location.href,
      timestamp: new Date().toISOString()
    };
  },
  
  // 检查页面是否可以被保存
  isPageSaveable: function() {
    const url = window.location.href;
    const invalidProtocols = ['chrome://', 'chrome-extension://', 'edge://', 'about:'];
    return !invalidProtocols.some(protocol => url.startsWith(protocol));
  }
};